package com.mashibing.juc.c_022_RefTypeAndThreadLocal;

import java.util.concurrent.TimeUnit;

/**
 * ThreadLocal设置的值是线程独有的
 * set(T value)
 *  map 的 key ： ThreadLocal this , map 的 value是 ： T value)
 *  这个map是Thread.currentThread.map
 * 使用场景：声明式事务
 * 在事务处理的时候，把数据库连接放到ThreadLocal中，再次拿connection的时候，直接从ThreadLocal中拿
 * @author: Yuanzt
 * @Date: 2021/3/31
 */
public class ThreadLocal2 {

    static ThreadLocal<Person> tl = new ThreadLocal<>();

    public static void main(String[] args) {
        new Thread(()->{
            try {
                TimeUnit.SECONDS.sleep(2);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(tl.get());
        }).start();

        new Thread(()->{
            try {
                TimeUnit.SECONDS.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            tl.set(new Person());
        }).start();
    }

    static class Person{
        String name = "zhangsan";
    }
}